package day.day10;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.junit.Test;

/**
 * 	演示Map（查询表）的使用
 * 	1.Map是存储键值对【人名:人】的集合
 * 	2.Map是无序的
 * 	3.在使用带有泛型的类时，泛型不能够是基本类型，使用包装类型
 * 
 * @author Administrator
 *
 */
public class MapDemo {

	/**
	 * 	获取
	 */
	@Test
	public void demo1() {
		
//		Map<String, Object> map = new Map<>();
		// map的创建
		Map<String, Object> map = new HashMap<String, Object>();
		
		Map<Integer, Object> students = new HashMap<>();
		
	}
	
	/**
	 * map的添加
	 * 	map在添加的时候，key是唯一的，若key重复则替换原来的值
	 */
	@Test
	public void demo2() {
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("110", "张三");
		map.put("120", "张三1");
		map.put("130", "张三2");
		map.put("140", "张三3");
		System.out.println(map);
		
		map.put("110", "李四");
		System.out.println(map);
		
		// 添加整个map集合
//		map.putAll(m);
	}
	
	/**
	 * map的删除
	 * 	1.依据key删除，按照key来删除
	 * 	2.依据键值对删除，键值对要相同，相同才能删除
	 */
	@Test
	public void demo3() {
		Map<String, String> map = createMap();
		System.out.println(map);
		System.out.println("==============");
		
		// 删除
		map.remove("4");
		System.out.println(map);
		System.out.println("=============");
		
		map.remove("3", "张三3");
		System.out.println(map);
	}
	
	/**
	 * map的修改：put
	 * 	1.put的返回值如果是null表明是添加
	 * 	2.put的返回值是：上一个相同key的value值
	 */
	@Test
	public void demo4() {
		Map<String, String> map = createMap();
		System.out.println(map);
		System.out.println("===============");
		
		// 修改
//		map.put("5", "李四五");
//		System.out.println(map);
		
		// put方法返回值的问题
		String s = map.put("1", "李四1"); // 修改
		System.out.println(s);
		System.out.println(map);
		System.out.println("===============");
		
		String s2 = map.put("6", "李四6"); // 添加
		System.out.println(s2);
		System.out.println(map);
	}
	
	/**
	 * 	查看
	 */
	@Test
	public void demo5() {
		Map<String, String> map = createMap();
		String name = map.get("1");
		System.out.println(name);
		
//		map.getOrDefault("", "");
	}
	
	/**
	 * 	遍历
	 * @return
	 */
	@Test
	public void demo6() {
		Map<String, String> map = createMap();
		// key值的遍历
//		Set<String> keySet = map.keySet();
//		Iterator<String> iterator = keySet.iterator();
//		while(iterator.hasNext()) {
//			String key = iterator.next();
//			System.out.println(key);
//			String value = map.get(key);
//			System.out.println(value);
//		}
		
		// value值的遍历
		Collection<String> values = map.values();
		for(String value : values) {
			System.out.println(value);
		}
		
		// 键值对的遍历
		Set<Entry<String, String>> entrySet = map.entrySet();
		Iterator<Entry<String, String>> iterator = entrySet.iterator();
		while(iterator.hasNext()) {
			Entry<String, String> next = iterator.next();
			String key = next.getKey();
			String value = next.getValue();
			System.out.println("key:" + key + ",value:" + value);
		}
	}
	
	/**
	 * 	其他方法
	 */
	@Test
	public void demo7() {
		Map<String, String> map = createMap();
		map.isEmpty(); // 判空
		map.clear(); // 清空
		map.containsKey("key"); // 验证包含key
		map.containsValue("value"); // 验证包含value值
	}
	
	public Map<String, String> createMap() {
		Map<String, String> map = new HashMap<String, String>();
		for(int i=0; i<5; i++) {
			map.put(""+i, "张三" + i);
		}
		return map;
	}
 	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
